home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacHack 1997
/
MacHack 1997.toast
/
Hacks
/
Hacks ’95
/
ClockDoubler
/
Sample.c
< prev
Wrap
C/C++ Source or Header
|
1995-06-24
|
2KB
|
97 lines
void main(void)
{
long oldA4;
Handle initH = 0;
oldA4 = SetCurrentA4();
RememberA4();
initH = Get1Resource('INIT', 333);
if(initH)
{
HackInit();
DetachResource(initH);
}
RestoreA4(oldA4);
}
void HackInit(void)
{
data = (DocPathDataHandle) NewHandleSys(sizeof(DocPathData));
if(data)
{
(*data)->howManyWaitingFiles = 0;
(*data)->howManyWaitingWindows = 0;
(*data)->links = (WindowFileLinkHandle) NewHandleSys(0);
(*data)->ignoringFiles = false;
(*data)->oldDragWindow = NGetTrapAddress (_DragWindow, ToolTrap);
NSetTrapAddress ((UniversalProcPtr)DragWindowStub, _DragWindow, ToolTrap);
(*data)->oldCloseWindow = NGetTrapAddress (_CloseWindow, ToolTrap);
NSetTrapAddress ((UniversalProcPtr)CloseWindowStub, _CloseWindow, ToolTrap);
(*data)->oldSetWTitle = NGetTrapAddress (_SetWTitle, ToolTrap);
NSetTrapAddress ((UniversalProcPtr)SetWTitleStub, _SetWTitle, ToolTrap);
(*data)->oldOpen = NGetTrapAddress (_Open, OSTrap);
NSetTrapAddress ((UniversalProcPtr)OpenStub, _Open, OSTrap);
(*data)->oldOpenRF = NGetTrapAddress (_OpenRF, OSTrap);
NSetTrapAddress ((UniversalProcPtr)OpenRFStub, _OpenRF, OSTrap);
(*data)->oldHFSDispatch = NGetTrapAddress (_HFSDispatch, OSTrap);
NSetTrapAddress ((UniversalProcPtr)HFSDispatchStub, _HFSDispatch, OSTrap);
(*data)->oldNewCWindow = NGetTrapAddress (_NewCWindow, ToolTrap);
NSetTrapAddress ((UniversalProcPtr)NewCWindowStub, _NewCWindow, ToolTrap);
(*data)->oldNewWindow = NGetTrapAddress (_NewWindow, ToolTrap);
NSetTrapAddress ((UniversalProcPtr)NewWindowStub, _NewWindow, ToolTrap);
(*data)->oldFindWindow = NGetTrapAddress (_FindWindow, ToolTrap);
NSetTrapAddress ((UniversalProcPtr)FindWindowStub, _FindWindow, ToolTrap);
}
}
asm void DragWindowStub( void )
{
// Reserve space on the stack for real DragWindow address
sub.l #4, SP
// save registers
movem.l A0-A5/D0-D7, -(SP)
jsr SetUpA4
// save real DragWindow address on the stack
move.l data, A0
move.l (A0), A0
move.l 8(A0), 56(SP)
// move HackDragWindow params on the stack
move.l 64(SP),-(SP)
move.l 72(SP),-(SP)
move.l 80(SP),-(SP)
jsr HackDragWindow
TST.W D0
// resotre stack pointer
LEA 12(SP),SP
movem.l (SP)+, A0-A5/D0-D7
BNE.S *+4
// forget about calling real DragWindow
add.l #4, SP
rts
}